import pyautogui
import keyboard
import time
from pystray import Icon, MenuItem, Menu
from PIL import Image, ImageDraw
import threading
import sys

# 目标点击位置
target_x, target_y = 1200, 688  # 右箭头点击位置
left_target_x, left_target_y = 1060, 683  # 左箭头点击位置

# 创建托盘图标
def create_image():
    # 创建一个简单的图标
    width = 64
    height = 64
    image = Image.new('RGB', (width, height), color=(255, 255, 255))
    draw = ImageDraw.Draw(image)
    draw.rectangle([0, 0, width, height], fill="black")
    return image

def on_quit(icon, item):
    icon.stop()  # 停止托盘图标
    stop_event.set()  # 设置停止事件，通知其他线程退出
    sys.exit()  # 退出程序

def tray_icon():
    # 创建托盘菜单
    menu = Menu(MenuItem('Quit', on_quit))

    # 创建托盘图标并运行
    icon = Icon("auto_clicker", create_image(), menu=menu)
    icon.run()

def auto_click():
    # 等待3秒，以便切换到目标应用
    print("请在 3 秒内切换到你想要模拟点击的窗口...")
    time.sleep(3)

    # 持续监听键盘事件
    while not stop_event.is_set():  # 只要 stop_event 没有被设置，线程就会继续运行
        if keyboard.is_pressed('right'):  # 检测到右箭头键被按下
            print(f"右箭头键被按下，准备点击鼠标位置 ({target_x}, {target_y})")

            # 移动鼠标到指定位置
            pyautogui.moveTo(target_x, target_y)

            # 执行鼠标点击操作
            pyautogui.click()

            # 等待一段时间，避免连续多次点击
            time.sleep(1)

        if keyboard.is_pressed('left'):  # 检测到左箭头键被按下
            print(f"左箭头键被按下，准备点击鼠标位置 ({left_target_x}, {left_target_y})")

            # 移动鼠标到左侧指定位置
            pyautogui.moveTo(left_target_x, left_target_y)

            # 执行鼠标点击操作
            pyautogui.click()

            # 等待一段时间，避免连续多次点击
            time.sleep(1)

        # 可以加入退出的条件，例如按下 'esc' 键来退出程序
        if keyboard.is_pressed('esc'):
            print("程序退出")
            break

# 创建一个线程事件，用于控制所有线程的停止
stop_event = threading.Event()

# 创建托盘图标的线程
tray_thread = threading.Thread(target=tray_icon, daemon=True)
tray_thread.start()

# 创建自动点击的线程
click_thread = threading.Thread(target=auto_click, daemon=True)
click_thread.start()

# 主线程等待，直到 stop_event 被设置，表示退出程序
stop_event.wait()
